/**
 * API接口封装
 * 封装所有后端API调用，统一处理请求和响应
 */

// Axios实例配置
axios.defaults.baseURL = CONFIG.API_BASE_URL;
axios.defaults.timeout = 10000;
axios.defaults.headers.common['Content-Type'] = 'application/json';

// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 可以在这里添加token等认证信息
    console.log('Request:', config.method.toUpperCase(), config.url, config.params || config.data);
    return config;
  },
  error => {
    console.error('Request Error:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
axios.interceptors.response.use(
  response => {
    console.log('Response:', response.config.url, response.data);
    // 检查后端返回的 ApiResponse 格式中的 code 字段
    const data = response.data;
    if (data && data.code && data.code !== '000000') {
      // code 不是成功码，视为业务错误
      console.error('Business Error:', data.code, data.message);
      return Promise.reject({
        response: {
          data: data
        },
        message: data.message
      });
    }
    return response.data;
  },
  error => {
    console.error('Response Error:', error);
    return Promise.reject(error);
  }
);

/**
 * API接口对象
 */
const API = {
  
  // ==================== 单位管理 API ====================
  
  /**
   * 获取所有单位列表
   * GET /api/units
   */
  getAllUnits() {
    return axios.get('units');
  },
  
  /**
   * 获取单位详情
   * GET /api/units/{code}
   */
  getUnitByCode(code) {
    return axios.get(`units/${code}`);
  },
  
  /**
   * 创建单位
   * POST /api/units
   */
  createUnit(data) {
    return axios.post('units', data);
  },
  
  /**
   * 更新单位
   * PUT /api/units/{code}
   */
  updateUnit(code, data) {
    return axios.put(`units/${code}`, data);
  },
  
  /**
   * 删除单位
   * DELETE /api/units/{code}
   */
  deleteUnit(code) {
    return axios.delete(`units/${code}`);
  },
  
  /**
   * 获取单位换算规则
   * GET /api/units/conversions
   */
  getConversionRules(params) {
    return axios.get('units/conversions', { params });
  },
  
  /**
   * 创建单位换算规则
   * POST /api/units/conversions
   */
  createConversionRule(data) {
    return axios.post('units/conversions', data);
  },
  
  // ==================== 商品管理 API ====================
  
  /**
   * 获取商品列表（分页）
   * GET /api/products
   */
  getProducts(params) {
    return axios.get('products', { params });
  },
  
  /**
   * 获取商品详情
   * GET /api/products/{id}
   */
  getProductById(id) {
    return axios.get(`products/${id}`);
  },
  
  /**
   * 创建商品
   * POST /api/products
   */
  createProduct(data) {
    return axios.post('products', data);
  },
  
  /**
   * 更新商品
   * PUT /api/products/{id}
   */
  updateProduct(id, data) {
    return axios.put(`products/${id}`, data);
  },
  
  /**
   * 删除商品（软删除）
   * DELETE /api/products/{id}
   */
  deleteProduct(id) {
    return axios.delete(`products/${id}`);
  },
  
  /**
   * 商品上架
   * PUT /api/products/{id}/activate
   */
  listProduct(id) {
    return axios.put(`products/${id}/activate`);
  },
  
  /**
   * 商品下架
   * PUT /api/products/{id}/deactivate
   */
  delistProduct(id) {
    return axios.put(`products/${id}/deactivate`);
  },
  
  /**
   * 搜索商品
   * POST /api/products/search
   */
  searchProducts(params) {
    return axios.post('products/search', params);
  },
  
  /**
   * 获取当前价目表下的商品列表（带价格和折扣信息）
   * GET /api/pricelists/current/products
   */
  getActiveProducts() {
    return axios.get('pricelists/current/products');
  },
  
  /**
   * 按关键词搜索商品（带价格信息）
   * GET /api/products/keyword?keyword=xxx
   */
  searchByKeyword(keyword) {
    return axios.get('products/keyword', { params: { keyword } });
  },
  
  // ==================== 价目表管理 API ====================
  
  /**
   * 获取价目表列表
   * GET /api/pricelists
   */
  getPriceLists(params) {
    return axios.get('pricelists', { params });
  },
  
  /**
   * 获取当前生效的价目表
   * GET /api/pricelists/active
   */
  getActivePriceList() {
    return axios.get('pricelists/active');
  },
  
  /**
   * 获取价目表详情
   * GET /api/pricelists/{id}
   */
  getPriceListById(id) {
    return axios.get(`pricelists/${id}`);
  },
  
  /**
   * 创建价目表
   * POST /api/pricelists
   */
  createPriceList(data) {
    return axios.post('pricelists', data);
  },
  
  /**
   * 更新价目表
   * PUT /api/pricelists/{id}
   */
  updatePriceList(id, data) {
    return axios.put(`pricelists/${id}`, data);
  },
  
  /**
   * 删除价目表
   * DELETE /api/pricelists/{id}
   */
  deletePriceList(id) {
    return axios.delete(`pricelists/${id}`);
  },
  
  /**
   * 激活价目表
   * PUT /api/pricelists/{id}/activate
   */
  activatePriceList(id) {
    return axios.put(`pricelists/${id}/activate`);
  },
  
  /**
   * 停用价目表
   * PUT /api/pricelists/{id}/deactivate
   */
  deactivatePriceList(id) {
    return axios.put(`pricelists/${id}/deactivate`);
  },
  
  /**
   * 获取价目表的价格条目列表
   * GET /api/pricelists/{priceListId}/entries
   */
  getPriceListEntries(priceListId, params) {
    return axios.get(`pricelists/${priceListId}/entries`, { params });
  },
  
  /**
   * 添加价格条目
   * POST /api/pricelists/{priceListId}/entries
   */
  addPriceListEntry(priceListId, data) {
    return axios.post(`pricelists/${priceListId}/entries`, data);
  },
  
  /**
   * 更新价格条目
   * PUT /api/pricelists/entries/{entryId}
   */
  updatePriceListEntry(entryId, data) {
    return axios.put(`pricelists/entries/${entryId}`, data);
  },
  
  /**
   * 删除价格条目
   * DELETE /api/pricelists/{priceListId}/entries/{entryId}
   */
  deletePriceListEntry(priceListId, entryId) {
    return axios.delete(`pricelists/${priceListId}/entries/${entryId}`);
  },
  
  // ==================== 促销规则管理 API ====================
  
  /**
   * 获取促销规则列表
   * GET /api/promotions
   */
  getPricingRules(params) {
    return axios.get('promotions', { params });
  },
  
  /**
   * 获取当前生效的促销规则
   * GET /api/promotions/rules/effective
   */
  getActivePricingRules() {
    return axios.get('promotions/rules/effective');
  },
  
  /**
   * 查询所有满减规则（包括未启用的，用于管理后台）
   * GET /api/promotions/threshold-discounts
   */
  getAllThresholdDiscounts() {
    return axios.get('promotions/threshold-discounts');
  },
  
  /**
   * 查询当前生效的满减规则（启用且在有效期内，用于前台展示横幅）
   * GET /api/promotions/threshold-discounts/effective
   */
  getEffectiveThresholdDiscounts() {
    return axios.get('promotions/threshold-discounts/effective');
  },
  
  /**
   * 查询所有单品折扣规则（用于管理后台详情展示）
   * GET /api/promotions/item-discounts
   */
  getAllItemDiscounts() {
    return axios.get('promotions/item-discounts');
  },
  
  /**
   * 获取促销规则详情
   * GET /api/promotions/{id}
   */
  getPricingRuleById(id) {
    return axios.get(`promotions/${id}`);
  },
  
  /**
   * 创建单品折扣规则
   * POST /api/promotions/item-discounts
   */
  createItemDiscountRule(data) {
    return axios.post('promotions/item-discounts', data);
  },
  
  /**
   * 创建满减规则
   * POST /api/promotions/threshold-discounts
   */
  createThresholdDiscountRule(data) {
    return axios.post('promotions/threshold-discounts', data);
  },
  
  /**
   * 更新促销规则
   * PUT /api/promotions/{id}
   */
  updatePricingRule(id, data) {
    return axios.put(`promotions/${id}`, data);
  },
  
  /**
   * 启用促销规则
   * PUT /api/promotions/rules/{id}/enable
   */
  enablePricingRule(id) {
    return axios.put(`promotions/rules/${id}/enable`);
  },
  
  /**
   * 禁用促销规则
   * PUT /api/promotions/rules/{id}/disable
   */
  disablePricingRule(id) {
    return axios.put(`promotions/rules/${id}/disable`);
  },
  
  /**
   * 删除促销规则
   * DELETE /api/promotions/rules/{id}
   */
  deletePricingRule(id) {
    return axios.delete(`promotions/rules/${id}`);
  },
  
  // ==================== 购物车管理 API ====================

  /**
   * 获取或创建购物车（演示模式：使用固定用户ID）
   * GET /api/carts/current
   */
  async getOrCreateCart() {
    const userId = CONFIG.DEMO_USER_ID;
    const sessionId = CONFIG.DEMO_SESSION_ID;
    
    return axios.get('carts/current', { 
      params: { 
        userId: userId,
        sessionId: sessionId 
      } 
    });
  },

  /**
   * 根据用户获取活跃购物车
   * GET /api/carts/user/{userId}/active
   */
  getActiveCartByUser(userId) {
    return axios.get(`carts/user/${userId}/active`);
  },

  /**
   * 获取购物车详情
   * GET /api/carts/{cartId}
   */
  getCart(cartId) {
    return axios.get(`carts/${cartId}`);
  },
  
  /**
   * 创建购物车
   * POST /api/carts
   */
  createCart(data) {
    return axios.post('carts', data);
  },
  
  /**
   * 添加商品到购物车
   * POST /api/carts/{cartId}/items
   */
  addCartItem(cartId, data) {
    return axios.post(`carts/${cartId}/items`, data);
  },
  
  /**
   * 更新购物车商品数量
   * PUT /api/carts/{cartId}/items/{itemId}
   */
  updateCartItem(cartId, itemId, data) {
    return axios.put(`carts/${cartId}/items/${itemId}`, data);
  },
  
  /**
   * 删除购物车商品
   * DELETE /api/carts/{cartId}/items/{itemId}
   */
  deleteCartItem(cartId, itemId) {
    return axios.delete(`carts/${cartId}/items/${itemId}`);
  },
  
  /**
   * 清空购物车
   * DELETE /api/carts/{cartId}/items
   */
  clearCart(cartId) {
    return axios.delete(`carts/${cartId}/items`);
  },
  
  /**
   * 获取购物车结算预览
   * GET /api/carts/{cartId}/checkout-preview
   */
  getCheckoutPreview(cartId) {
    return axios.get(`carts/${cartId}/checkout-preview`);
  },
  
  // ==================== 订单管理 API ====================
  
  /**
   * 创建订单（结算）
   * POST /api/orders/checkout
   */
  checkout(data) {
    return axios.post('orders/checkout', data);
  },
  
  /**
   * 获取订单详情
   * GET /api/orders/{orderId}
   */
  getOrderById(orderId) {
    return axios.get(`orders/${orderId}`);
  },
  
  /**
   * 支付订单
   * POST /api/orders/{orderId}/pay
   */
  payOrder(orderId, data) {
    return axios.post(`orders/${orderId}/pay`, data);
  },
  
  /**
   * 取消订单
   * POST /api/orders/{orderId}/cancel
   */
  cancelOrder(orderId, data) {
    return axios.post(`orders/${orderId}/cancel`, data);
  },
  
  /**
   * 完成订单
   * POST /api/orders/{orderId}/complete
   */
  completeOrder(orderId) {
    return axios.post(`orders/${orderId}/complete`);
  },
  
  /**
   * 获取订单列表
   * GET /api/orders
   */
  getOrders(params) {
    return axios.get('orders', { params });
  },
  
  /**
   * 搜索订单
   * POST /api/orders/search
   */
  searchOrders(params) {
    return axios.post('orders/search', params);
  },
};

// 导出API对象
if (typeof module !== 'undefined' && module.exports) {
  module.exports = API;
}

